String.prototype.length2 = function (){
	return this.replace(/[^\x00-\xff]/g,"aa").length;
}
String.prototype.trim = function (){
	return trim(this);
}

RegExp.prototype.execs=function(str){
var arr=[];
	if(this.global){
		this.lastindex=0;
			while((a=this.exec(str))!=null){
			arr.push(a[0]);
			this.lastindex++;
			}
		return arr;
	}else{
		return arr.concat(this.exec(str))
	}
}



/**
 *
 * 在html 中 增加了4个属性
 * validator :  true|false|empty  true 需要验证 false 不需要验证 empty 为空时不需要验证
 * regtype :   系统内置的验证类型 目前 有   integer|float|chinese_char|tel|email|post|idcard|ip|url  其余仍然在收集中
 * regexp : 自定义 正则表达式
 * message : 验证失败后的提示信息
 *
 * @author 散仙
 * @since  2007-08-09
 * @version 0.7 beta
*/


var jvform_integer=new RegExp("^-?[1-9]\\d*$");																		//整数
var jvform_float=new RegExp("^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0|^-?[1-9]\\d*)$");						//浮点数
var jvform_chinese_char=/^[\u4e00-\u9fa5]*$/																		//中文 (不知道为什么 空白也是true)

var jvform_tel=/\d{3}-\d{8}|\d{4}-\d{7}/																			//电话号码
var jvform_email=/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/														//email
var jvform_post=/[1-9]\d{5}(?!\d)/																					//中国邮编
var jvform_idcard=/\d{15}|\d{18}/																					//身份证

var jvform_ip=/\d+\.\d+\.\d+\.\d+/																					//ip
var jvform_url=new RegExp("[a-zA-z]+://[^\s]*");																	//url

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var jvform_length=/^length\[\d+,\d+\]|^\[\d+,\d+\]/
var jvform_length2=/^length2\[\d+,\d+\]/


function jvform(){
	
}


function jvform.check(v_form){
var eles = v_form.elements;
		if(typeof(eles) != "undefined"  && typeof(eles.length) != "undefined" ) {
			for(i=0,n=eles.length;i<n; i++) {
				var obj= eles.item(i);
				if(jvform.checkNeedReg(obj)){
					 if(!jvform.checkObj(obj)){
						alert(obj.message);
						obj.focus();
						return false;
					}
				}
			}
		}
		return true;
};

function jvform.checkNeedReg(v_obj){
	if(v_obj.validator && v_obj.validator=="true"){
		return true;
	}else if(v_obj.validator && v_obj.validator=="empty" && v_obj.value!=""){
		return true;
	}else{
		return false;
	}
}

function jvform.checkObj(v_obj){
	if(v_obj.regtype && v_obj.regtype!=""){
		return jvform.checkRegType(v_obj);
	}else if(v_obj.regexp && v_obj.regexp!=""){
		return jvform.checkRegExp(v_obj);
	}else{
		return false;
	}
};

function jvform.checkRegType(v_obj){
	var v_regstr=v_obj.regtype;
	var v_regs=v_regstr.split("|");
	var flag=true;
	for(var i=0,n=v_regs.length;i<n;i++){
		if(a=jvform_length.exec(v_regs[i])!=null){

			flag=flag && jvform.checkLength(v_obj,v_regs[i]);

		}else if(a=jvform_length2.exec(v_regs[i])!=null){

			flag=flag && jvform.checkLength2(v_obj,v_regs[i]);

		}else{
		var v_reg=eval("jvform_"+v_regs[i]);
		flag=flag && v_reg.test(v_obj.value);
		}
	}
	return flag;
};

function jvform.checkRegExp(v_obj){
	var reg=RegExp(v_obj.regexp);
	return reg.test(v_obj.value);
};

function jvform.checkLength(v_obj,v_reg_str){
	var temp=/\d+/g
	var t=temp.execs(v_reg_str);
	var a=t[0],b=t[1];
	if(v_obj.value.length >=a && v_obj.value.length <=b){
		return true;
	}else{
		return false;
	}
}

function jvform.checkLength2(v_obj,v_reg_str){
	var temp=/\d+/g
	var temp2=/\[.*\]/
	v_reg_str=temp2.exec(v_reg_str);
	var t=temp.execs(v_reg_str);
	var	 a=t[0],b=t[1];

	if(v_obj.value.length2() >=a && v_obj.value.length2() <=b){
		return true;
	}else{
		return false;
	}
}
